Load the lib (you might want to install it first).
library(bibliometrix) ### load bibliometrix package
library(htmlwidgets) # to have saveWidget
library(data.table) # for the sources tables
Import the wos and scopus publication files.
file_wos <- "wos_2018_2023.bib"
file_scopus <- "scopus_2018_2024.bib"
M_wos <- convert2df(file = file_wos, dbsource = "wos", format = "bibtex")
Converting your wos collection into a bibliographic dataframe
Done!
Generating affiliation field tag AU_UN from C1: Done!
M_scopus <- convert2df(file = file_scopus, dbsource = "scopus", format = "bibtex")
Converting your scopus collection into a bibliographic dataframe
Warning:
In your file, some mandatory metadata are missing. Bibliometrix functions may not work properly!
Please, take a look at the vignettes:
- 'Data Importing and Converting' (https://www.bibliometrix.org/vignettes/Data-Importing-and-Converting.html)
- 'A brief introduction to bibliometrix' (https://www.bibliometrix.org/vignettes/Introduction_to_bibliometrix.html)
Missing fields: CR
Done!
Generating affiliation field tag AU_UN from C1: Done!
Removed 9 duplicated documents
First bibliometric analysis:
results_wos <- biblioAnalysis(M_wos, sep = ";")
results_scopus <- biblioAnalysis(M_scopus, sep = ";")
write.csv(results_wos$Sources, "sources_wos.csv", row.names=FALSE)
write.csv(results_scopus$Sources, "sources_scopus.csv", row.names=FALSE)
Basic plots for WoS data.
plot(x = results_wos, k = 10, pause = FALSE)
Avis : Removed 1 rows containing non-finite values (`stat_align()`).
Basic plots for Scopus data.
plot(x = results_scopus, k = 10, pause = FALSE)
Avis : Removed 1 rows containing non-finite values (`stat_align()`).
Some citation analysis with WoS data.
CR <- citations(M_wos, field = "article", sep = ";")
cbind(CR$Cited[1:10])
[,1]
LOWE DG, 2004, INT J COMPUT VISION, V60, P91, DOI 10.1023/B:VISI.0000029664.99615.94 14
RONNEBERGER O, 2015, LECT NOTES COMPUT SC, V9351, P234, DOI 10.1007/978-3-319-24574-4\\_28 11
ANONYMOUS, P IEEE C COMP VIS PA 10
INGLADA J, 2017, REMOTE SENS-BASEL, V9, DOI 10.3390/RS9010095 10
GOODCHILD MF, 2007, GEOJOURNAL, V69, P211, DOI 10.1007/S10708-007-9111-Y 8
MACKANESS W., 2002, P JOINT ISPRSICA WOR, P7 8
TOUYA G, 2010, T GIS, V14, P595, DOI 10.1111/J.1467-9671.2010.01215.X 8
TOUYA G, 2019, INT J CARTOGRAPHY, V5, P142, DOI 10.1080/23729333.2019.1613071 8
COUCLELIS H., 1987, J ENVIRON PSYCHOL, V7, P99, DOI DOI 10.1016/S0272-4944(87)80020-8, HTTPS://DOI.ORG/10.1016/S0272-4944(87)80020-8 7
GIRRES JF, 2010, T GIS, V14, P435, DOI 10.1111/J.1467-9671.2010.01203.X 7
A <- cocMatrix(M_wos, Field = "SO", sep = ";")
sort(Matrix::colSums(A), decreasing = TRUE)[1:10]
ISPRS INTERNATIONAL JOURNAL OF GEO-INFORMATION REMOTE SENSING
12 12
INTERNATIONAL JOURNAL OF CARTOGRAPHY 30TH INTERNATIONAL CARTOGRAPHIC CONFERENCE (ICC 2021), VOL 4
9 7
IGARSS 2018 - 2018 IEEE INTERNATIONAL GEOSCIENCE AND REMOTE SENSING SYMPOSIUM ISPRS JOURNAL OF PHOTOGRAMMETRY AND REMOTE SENSING
7 7
REMOTE SENSING OF ENVIRONMENT 2019 JOINT URBAN REMOTE SENSING EVENT (JURSE)
5 4
2020 MEDITERRANEAN AND MIDDLE-EAST GEOSCIENCE AND REMOTE SENSING SYMPOSIUM (M2GARSS) INTERNATIONAL JOURNAL OF GEOGRAPHICAL INFORMATION SCIENCE
4 4
A <- cocMatrix(M_wos, Field = "CR", sep = ". ")
sort(Matrix::colSums(A), decreasing = TRUE)[1:10]
ACHANTA R 2012 IEEE T PATTERN ANAL
2
ADAMO M 2014 LANDSCAPE ECOL
2
ADHIKARI B 2018 LECT NOTES ARTIF INT
2
ADLER BT 2011 LECT NOTES COMPUT SC
2
ALI I 2016 J PLANT ECOL
2
ALTAMIMI Z 2016 J GEOPHYS RES-SOL EA
2
ALVINA J 2014 PROCEEDINGS OF THE 2014 INTERNATIONAL WORKING CONFERENCE ON ADVANCED VISUAL INTERFACES AVI 2014 P125
2
AMAZIRH A 2018 REMOTE SENS ENVIRON
2
ANONYMOUS 2006 INT ARCH PHOTOGRAM 3 BOUDET L 2006 IAPRS
2
ANOOSHEH A 2019 IEEE INT CONF ROBOT P5958
2
The main sources for publication according to WoS data:
data.table(results_wos$Sources)
The main sources for publication according to Scopus data:
data.table(results_scopus$Sources)
Create keyword co-occurrences network with WoS data:
NetMatrix <- biblioNetwork(M_wos, analysis = "co-occurrences", network = "keywords", sep = ";")
# Plot the network
net=networkPlot(NetMatrix, normalize="association", weighted=T, n = 25, Title = "WoS Keyword Co-occurrences", type = "fruchterman", size=T, edgesize = 4,labelsize=1.0,community.repulsion = 0.1,size.cex = T,halo = F)
Create keyword co-occurrences network with Scopus data:
NetMatrix <- biblioNetwork(M_scopus, analysis = "co-occurrences", network = "keywords", sep = ";")
# Plot the network
net=networkPlot(NetMatrix, normalize="association", weighted=T, n = 20, Title = "Scopus Keyword Co-occurrences", type = "fruchterman", size=T, edgesize = 4,labelsize=1.0,community.repulsion = 0.1,size.cex = T,halo = F)
Create classical article coupling network with WoS data:
NetMatrix <- biblioNetwork(M_wos, analysis = "coupling", network = "references", sep = ";")
# Plot the network
net=networkPlot(NetMatrix, normalize = "salton", weighted=NULL, n = 30, Title = "WoS Article' Coupling", type = "fruchterman", size=10,size.cex=T,remove.multiple=TRUE,labelsize=1.0,label.n=20,label.cex=F)
Create authors’ coupling network with WoS data:
NetMatrix <- biblioNetwork(M_wos, analysis = "coupling", network = "authors", sep = ";")
net=networkPlot(NetMatrix, normalize = "salton", weighted=T, n = 20, Title = "WoS Authors' Coupling", type = "fruchterman", size = 5,size.cex=T,remove.multiple=TRUE,labelsize=2.0,label.n=20,label.cex = T)
Conceptual Structure using keywords (method=“CA”) with WoS data:
options(ggrepel.max.overlaps = Inf)
CS <- conceptualStructure(M_wos,field="ID", method="CA", minDegree=4, clust=5, stemming=FALSE, labelsize=10, documents=10)
Conceptual Structure using keywords (method=“CA”) with Scopus data:
CS <- conceptualStructure(M_scopus,field="ID", method="CA", minDegree=4, clust=5, stemming=FALSE, labelsize=10, documents=10)
Create a historical citation network with WoS data:
options(width=200)
histResults <- histNetwork(M_wos, min.citations = 1, sep = ";")
WOS DB:
Searching local citations (LCS) by reference items (SR) and DOIs...
Analyzing 9716 reference items...
Found 22 documents with no empty Local Citations (LCS)
# Plot a historical co-citation network
net <- histPlot(histResults, n=20, size = 10, labelsize=5)
Legend
Read the synonym and ignored keywords files.
#synonyms_file <- read.csv("synonyms.csv")
synonyms_file <- scan("synonyms.csv",sep='\n', what = "", quiet = TRUE)
synonyms_file <- gsub(",", "; ", synonyms_file)
synonyms_file <- c(synonyms_file)
remove_file <- scan("remove.csv",sep='\n', what = "", quiet = TRUE)
remove_file <- remove_file
Now, create the thematic map using the synonyms with WoS data:
res <- thematicMap(M_wos, field = "ID", n = 250, minfreq = 5, size = 0.5, repel = TRUE, synonyms = synonyms_file, remove.terms = remove_file)
plot(res$map)
Now, create the thematic map using the synonyms and the author’s keywords with WoS data:
res <- thematicMap(M_wos, field = "DE", n = 250, minfreq = 5, size = 0.5, repel = TRUE, synonyms = synonyms_file, remove.terms = remove_file)
plot(res$map)
The same but with the Scopus data:
res <- thematicMap(M_scopus, field = "ID", n = 250, minfreq = 5, size = 0.5, repel = TRUE, synonyms = synonyms_file, remove.terms = remove_file)
plot(res$map)
The same but with the Scopus data and the author’s keywords:
res <- thematicMap(M_scopus, field = "DE", n = 250, minfreq = 5, size = 0.5, repel = TRUE, synonyms = synonyms_file, remove.terms = remove_file)
plot(res$map)
We add the function to create wordlists.
wordlist <- function(M, Field, n, measure, ngrams, remove.terms=NULL, synonyms=NULL){
switch(Field,
ID={v=tableTag(M,"ID", remove.terms = remove.terms, synonyms = synonyms)},
DE={v=tableTag(M,"DE", remove.terms = remove.terms, synonyms = synonyms)},
TI={
if (!("TI_TM" %in% names(M))){
v=tableTag(M,"TI", ngrams=ngrams, remove.terms=remove.terms, synonyms = synonyms)
}},
AB={if (!("AB_TM" %in% names(M))){
v=tableTag(M,"AB", ngrams=ngrams, remove.terms = remove.terms, synonyms = synonyms)
}},
WC={
v=tableTag(M,"WC")
}
)
names(v)=tolower(names(v))
#v=tableTag(values$M,"ID")
n=min(c(n,length(v)))
Words=data.frame(Terms=names(v)[1:n], Frequency=(as.numeric(v)[1:n]), stringsAsFactors = FALSE)
W=Words
switch(measure,
identity={},
sqrt={W$Frequency=sqrt(W$Frequency)},
log={W$Frequency=log(W$Frequency+1)},
log10={W$Frequency=log10(W$Frequency+1)}
)
results=list(v=v,W=W, Words=Words)
return(results)
}
resW <- wordlist(M=M_wos, Field="ID", n=150, measure="identity", ngrams=1, synonyms = synonyms_file, remove.terms = remove_file)
W <- resW$W
write.csv(resW[["W"]], "data_wos.csv", row.names=FALSE)
Words <- resW$Words
w1 <- wordcloud2::wordcloud2(W, size = 1.5, minRotation = 0, maxRotation = 0, rotateRatio = 1)#minRotation = -pi/2, maxRotation = -pi/2)
saveWidget(w1, 'w1.html', selfcontained = T)
Wordcloud with WoS and keywords plus.
resW <- wordlist(M=M_wos, Field="DE", n=150, measure="identity", ngrams=1, remove.terms = remove_file, synonyms = synonyms_file)
W <- resW$W
write.csv(resW[["W"]], "data_wos_de.csv", row.names=FALSE)
Words <- resW$Words
w2 <- wordcloud2::wordcloud2(W, size = 1.5, minRotation = 0, maxRotation = 0, rotateRatio = 1)#minRotation = -pi/2, maxRotation = -pi/2)
saveWidget(w2, 'w2.html', selfcontained = T)
Wordcloud with WoS and author’s keywords.
resW <- wordlist(M=M_scopus, Field="ID", n=150, measure="identity", ngrams=1, remove.terms = remove_file, synonyms = synonyms_file)
W <- resW$W
write.csv(resW[["W"]], "data_scopus.csv", row.names=FALSE)
Words <- resW$Words
w3 <- wordcloud2::wordcloud2(W, size = 1.5, color = 'random-dark', minRotation = 0, maxRotation = 0, rotateRatio = 1)
saveWidget(w3, 'w3.html', selfcontained = T)
Wordcloud with Scopus and keywords plus.
resW <- wordlist(M=M_scopus, Field="DE", n=150, measure="identity", ngrams=1, remove.terms = remove_file, synonyms = synonyms_file)
W <- resW$W
write.csv(resW[["W"]], "data_scopus_de.csv", row.names=FALSE)
Words <- resW$Words
w4 <- wordcloud2::wordcloud2(W, size = 1.5, color = 'random-dark', minRotation = 0, maxRotation = 0, rotateRatio = 1)
saveWidget(w4, 'w4.html', selfcontained = T)
Wordcloud with Scopus and author’s keywords.
We are done!